#include <QApplication>
#include <QLabel>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>
#include <QClipboard>
#include <QImage>
#include <QVBoxLayout>
#include <QMessageBox>
#include <QFileInfo>

#include <screenutil.h>
#include <version.h>

class ImageDropWindow : public QWidget
{
    Q_OBJECT

public:
    ImageDropWindow(QWidget *parent = nullptr) : QWidget(parent)
    {
        // 设置窗口标题
        setWindowTitle("拖入图片到剪贴板");

        // 设置窗口大小
        setFixedSize(400, 300);

        // 创建一个标签用于显示提示信息
        QLabel *label = new QLabel("将图片拖入此窗口", this);
        label->setAlignment(Qt::AlignCenter);

        // 设置布局
        QVBoxLayout *layout = new QVBoxLayout(this);
        layout->addWidget(label);
        setLayout(layout);

        // 启用拖放功能
        setAcceptDrops(true);
    }

protected:
    // 拖入事件
    void dragEnterEvent(QDragEnterEvent *event) override
    {
        // 检查拖入的内容是否包含文件
        if (event->mimeData()->hasUrls())
        {
            event->acceptProposedAction();
        }
    }

    // 放下事件
    void dropEvent(QDropEvent *event) override
    {
        // 获取拖入的文件路径
        const QMimeData *mimeData = event->mimeData();
        if (mimeData->hasUrls())
        {
            QList<QUrl> urlList = mimeData->urls();
            for (const QUrl &url : urlList)
            {
                QString filePath = url.toLocalFile();

                // 检查文件是否是图片
                if (isImageFile(filePath))
                {
                    // 将图片加载到剪贴板
                    QImage image(filePath);
                    if (!image.isNull())
                    {
                        QApplication::clipboard()->setImage(image);
                        QMessageBox::information(this, "成功", "图片已复制到剪贴板！");
                    }
                    else
                    {
                        QMessageBox::warning(this, "错误", "无法加载图片！");
                    }
                }
                else
                {
                    QMessageBox::warning(this, "错误", "拖入的文件不是图片！");
                }
            }
        }
    }

private:
    // 检查文件是否是图片
    bool isImageFile(const QString &filePath)
    {
        QStringList imageExtensions = {"png", "jpg", "jpeg", "bmp", "gif"};
        QFileInfo fileInfo(filePath);
        return imageExtensions.contains(fileInfo.suffix().toLower());
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setApplicationName("skeleton");
    a.setApplicationDisplayName("基本 QT 程序框架 - " PROJECT_VERSION);

    // 创建并显示窗口
    ImageDropWindow window;
    window.show();

   
    ScreenUtil::moveCenterForCursor(window);

    return a.exec();
}

#include "main.moc"
